package com.vast.ui.component.factory;

import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;

import com.vast.ui.component.models.ItemArray;
import com.vast.ui.component.models.ItemPanel;
import com.vast.ui.component.providers.ItemEditingSupport;
import com.vast.ui.component.providers.ItemContentProvider;
import com.vast.ui.component.providers.ItemLabelProvider;

public class ItemTableViewerFactory {
	Display display = null;
	
	public static TableViewer createTableViewer(final Composite parent, final ItemPanel itemPanel, int numberOfColumn, int numberOfRaw, int initialValue) {		
		// Set ContentProvider
		final TableViewer viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
				| SWT.V_SCROLL | SWT.FULL_SELECTION);

		createColumns(viewer, numberOfColumn + 1);
		
		ItemArray itemArray;

		if(numberOfRaw > 0) {
			for(int i = 0; i < numberOfRaw; i++) {
				itemArray = new ItemArray(numberOfColumn, initialValue);
				itemPanel.add(itemArray);
			}
		}
		
		parent.getDisplay().asyncExec(new Runnable() {
			public void run() {
				// Set ContentProvider
				viewer.setContentProvider(new ItemContentProvider());
				
				// Set LabelProvider
				viewer.setLabelProvider(new ItemLabelProvider(parent.getDisplay()));
				
				viewer.setInput(itemPanel);
			}
		});
		return viewer;
	}
	
	private static void createColumns(final TableViewer viewer, int numberOfColumn) {
		Table table = viewer.getTable();

		// Define Column
		for (int i = 0; i < numberOfColumn; i++) {
			TableViewerColumn column = new TableViewerColumn(viewer, SWT.CENTER);
			if(i%numberOfColumn ==0){	
				column.getColumn().setWidth(0);
			}else {
				column.getColumn().setText(Integer.toString(i-1));
				column.getColumn().setResizable(false);
				column.getColumn().setMoveable(false);
				column.getColumn().setWidth(50);
				column.setEditingSupport(new ItemEditingSupport(viewer, i-1));
			}
		}	
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
	}
}
